
//创建 Cards类 目的是解决 多卡牌数量的情况

//思考日常生活 关于卡牌的 规则
//牌组 的 底层 就是 数组

//1. 先购买一副牌 (即创建一组牌)

//2. 洗牌

//3. 发牌

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

//4. 接牌
public class Cards {

    //定义 花色组
    public static final String[] suits = {"♠","♦","♥","♣"};

    //1. 创建一组牌
    public List<Card> createCards(){
        //创建  接收所有牌的 容器
        //目的  使用cardList 接收   ， 现实对应即是 购买得到全新的一副牌
        List<Card> cardList = new ArrayList<>();
//        List<Integer> cardList1 = new ArrayList<>();
//        ArrayList<Integer> cardList2 = new ArrayList<>();
        // cardList1 使用了向上转型，因此 cardList1 能使用的只有 List 接口中的方法，无法用ArrayList中的方法
        // cardList2 既可以使用 List接口中的方法 也可以使用 ArrayList中的方法
        // 那么我们为什么不一直都使用 cardList2 这种方式创建对象。(可以使用子类的所有方法)
        // 举个不那么恰当的说法（虽然这里是 接口 ，但我想说的想法是关于父类和子类 的创建 对象引用的方法）
        // cardList1 创建方式的存在 只是 为了向上转型和动态绑定吗？

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 14; j++) {
                Card card = new Card(j,suits[i]);
                cardList.add(card);
            }
        }
        return cardList;
    }

    //2. 洗牌
    public void shuffleCard(List<Card> cardList){
        Random random = new Random();
        for (int i = cardList.size() - 1; i > 0; i--) {
            int indexCard = random.nextInt(i);
            //indexCard 是 生成的随机数字
            //i 则是正常数字
            //他们就是需要互换的下标
            swap(cardList,i,indexCard);
        }

    }

    public void swap(List<Card> cardList,int aIndex,int bIndex){
        Card tmp = cardList.get(aIndex);
        cardList.set(aIndex,cardList.get(bIndex));
        cardList.set(bIndex,tmp);
    }

    //3. 发牌
    public void drawCard(List<Card> cardList){

        //发牌的话，就要接牌
        //三个人 手中接的牌就 是 三个独立的数组
        //但单独创建三个数组还不行，因为他们此时毫无关系
        //但在牌局中，三个人的牌组 都是 从一整副牌 ，依次按顺序 均分到三人手中
        //因此要把这 三个独立的数组 整合起来
        //那么就需要再定义一个数组 而数组中 则放这三个数组
        //那么这里就是 二维数组和一维数组

        List<List<Card>> hands = new ArrayList<>();

        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();

        //以上只是 创建好了 数组 但他们直接并没有构成关系
        hands.add(hand1);
        hands.add(hand2);
        hands.add(hand3);


        //假设每个人依次分别拿五张牌
        for (int i = 1; i <= 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card card = cardList.remove(0);
                hands.get(j).add(card);
            }
        }

        //展示手中的牌
        System.out.println("第一个人手中的牌是" + hand1);
        System.out.println("第二个人手中的牌是" + hand2);
        System.out.println("第三个人手中的牌是" + hand3);


    }






}
